#### Few-Shot 学习
samples = [
  {
    "flower_type": "玫瑰",
    "occasion": "爱情",
    "ad_copy": "玫瑰，浪漫的象征，是你向心爱的人表达爱意的最佳选择。"
  },
  {
    "flower_type": "康乃馨",
    "occasion": "母亲节",
    "ad_copy": "康乃馨代表着母爱的纯洁与伟大，是母亲节赠送给母亲的完美礼物。"
  },
  {
    "flower_type": "百合",
    "occasion": "庆祝",
    "ad_copy": "百合象征着纯洁与高雅，是你庆祝特殊时刻的理想选择。"
  },
  {
    "flower_type": "向日葵",
    "occasion": "鼓励",
    "ad_copy": "向日葵象征着坚韧和乐观，是你鼓励亲朋好友的最好方式。"
  }
]

# 2. 创建一个提示模板
from langchain.prompts import PromptTemplate

template="鲜花类型: {flower_type}\n场合: {occasion}\n文案: {ad_copy}"
prompt_sample = PromptTemplate(input_variables=["flower_type", "occasion", "ad_copy"], 
                               template=template)

# 3. 创建一个FewShotPromptTemplate对象，使用全量 事例
# from langchain.prompts.few_shot import FewShotPromptTemplate
# prompt = FewShotPromptTemplate(
#     examples=samples,
#     example_prompt=prompt_sample,
#     suffix="鲜花类型: {flower_type}\n场合: {occasion}",
#     input_variables=["flower_type", "occasion"]
# )
# print(prompt)

# 4. 使用示例选择器, 基于语义相似度选择示例,一次性把所有示例发送给模型是不现实而且低效的。另外，每次都包含太多的 Token 也会浪费流量（OpenAI 是按照 Token 数来收取费用）
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain_community.vectorstores import Chroma
from langchain_ollama.embeddings import OllamaEmbeddings
from langchain.prompts.few_shot import FewShotPromptTemplate

# 初始化示例选择器
example_selector = SemanticSimilarityExampleSelector.from_examples(
    samples,
    OllamaEmbeddings(
      model="nomic-embed-text",  # ollama embedding model
      base_url="http://localhost:11434",  # Ollama 的服务地址
    ),
    Chroma, # 向量库
    k=1
)

# 创建一个使用示例选择器的FewShotPromptTemplate对象
prompt = FewShotPromptTemplate(
    example_selector=example_selector, 
    example_prompt=prompt_sample, 
    suffix="鲜花类型: {flower_type}\n场合: {occasion}", 
    input_variables=["flower_type", "occasion"]
)
print('提示词：',prompt.format(flower_type="红玫瑰", occasion="爱情"))


# 解耦 promp和 model
from langchain_ollama import ChatOllama
llm = ChatOllama(
    model="deepseek-r1:8b",
    # model="gemma3:1b",
    base_url="http://localhost:11434",  # Ollama 服务地址
    temperature=0.7,  # 创造性程度
    num_predict=512,  # 最大生成长度
)

output = llm.invoke(prompt.format(flower_type="野玫瑰", occasion="爱情"))
print('模型输出：',output.content)
